// import axios from 'axios'
// import store from '@/store'
// import { Message } from 'element-ui'

// const service = axios.create({ // 二次封装axios
//   baseURL: process.env.VUE_APP_BASE_API, // 区分生产环境和生厂环境 用变量赋值 不写死
//   timeout: 10000
// })

// // 请求拦截器   请求后端服务要有token所所以先统一注入token
// // 有两个参数  成功返回config  失败返回error对象
// service.interceptors.request.use((config) => {
//   if (store.getters.token) {
//     config.headers.Authorization = `Bearer ${store.getters.token}`
//     // 在请求头里注入token
//   }
//   return config
// }
// , (error) => {
//   // 失败执行promise
//   return Promise.reject(error)
// })

// // 响应拦截器
// // 两个参数 成功response  失败error
// service.interceptors.response.use((response) => {
//   const { data, success, message } = response.data
//   if (success) { // response.data 包含响应成功返回给用户的data
//     return data // 响应状态(success)和返回信息(message)
//   } else {
//     Message({ type: 'error', message })
//     return Promise.reject(new Error(message))
//   }
//   // axios默认给用户返回成功的数据封装data
// }, async(error) => {
//   // 给用户提示信息
//   Message({ // element-ui 组件消息提示框
//     type: 'error',
//     message: error.message
//   })
//   return Promise.reject(error)
// })

// export default service
import axios from 'axios'
import store from '@/store'
import { Message } from 'element-ui'
import router from '@/router'
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // 基础地址
  timeout: 10000
}) // 创建一个新的axios实例
// 成功1 失败2
service.interceptors.request.use((config) => {
  // 注入token
//  this.$store.getters
  // store.getters.token => 请求头里面
  if (store.getters.token) {
    config.headers.Authorization = `Bearer ${store.getters.token}`
  }
  return config
}, (error) => {
  // 失败执行promise
  return Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use((response) => {
  // axios默认包裹了data
  if (response.data instanceof Blob) return response.data
  const { data, message, success } = response.data
  if (success) {
    return data
  } else {
    Message({ type: 'error', message })
    return Promise.reject(new Error(message))
  }
}, async(error) => {
  // error.message
  if (error.response.status === 401) {
    Message({ type: 'warning', message: 'token超时了' })
    await store.dispatch('user/exitLogin')
    router.push('/login')
    return Promise(new Error(error))
    // 处理token过期(响应异常的时候捕获)监视里error.response.status
  }
  Message({ type: 'error', message: error.message })
  return Promise.reject(error)
})
export default service
